//给你一个由 不同 整数组成的整数数组 arr 和一个整数 k 。 
//
// 每回合游戏都在数组的前两个元素（即 arr[0] 和 arr[1] ）之间进行。比较 arr[0] 与 arr[1] 的大小，较大的整数将会取得这一回合的
//胜利并保留在位置 0 ，较小的整数移至数组的末尾。当一个整数赢得 k 个连续回合时，游戏结束，该整数就是比赛的 赢家 。 
//
// 返回赢得比赛的整数。 
//
// 题目数据 保证 游戏存在赢家。 
//
// 
//
// 示例 1： 
//
// 输入：arr = [2,1,3,5,4,6,7], k = 2
//输出：5
//解释：一起看一下本场游戏每回合的情况：
//
//因此将进行 4 回合比赛，其中 5 是赢家，因为它连胜 2 回合。
// 
//
// 示例 2： 
//
// 输入：arr = [3,2,1], k = 10
//输出：3
//解释：3 将会在前 10 个回合中连续获胜。
// 
//
// 示例 3： 
//
// 输入：arr = [1,9,8,2,3,7,6,4,5], k = 7
//输出：9
// 
//
// 示例 4： 
//
// 输入：arr = [1,11,22,33,44,55,66,77,88,99], k = 1000000000
//输出：99
// 
//
// 
//
// 提示： 
//
// 
// 2 <= arr.length <= 10^5 
// 1 <= arr[i] <= 10^6 
// arr 所含的整数 各不相同 。 
// 1 <= k <= 10^9 
// 
//
// Related Topics 数组 模拟 👍 80 👎 0

package leetcode.editor.cn;
//java:找出数组游戏的赢家
public class Q1535FindTheWinnerOfAnArrayGame {
    public static void main(String[] args){
        Solution solution = new Q1535FindTheWinnerOfAnArrayGame().new Solution();
        solution.getWinner(new int[] {1,25,35,42,68,70}, 1);
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
        // 超时, 如果某个值已经是最大的，那么就直接返回，无论k为多少次，都是这个值最大
//    public int getWinner(int[] arr, int k) {
//        int prevMax = Math.max(arr[0], arr[1]);
//        int count = 0;
//        int curMax = prevMax;
////        while (true) {
//        for (int i = 0; i < arr.length; i++) {
//            if (arr[0] < arr[1]) {
//                curMax = arr[1];
//                insertLastElement(arr, 0);
//            } else {
//                curMax = arr[0];
//                insertLastElement(arr, 1);
//            }
//            count = prevMax == curMax ? count + 1 : 1;
//            prevMax = curMax;
//            if (count == k) {
//                return curMax;
//            }
//        }
//        return curMax;
//    }
//
//    public void insertLastElement(int[] arr, int index) {
//        int value = arr[index];
//        for (int i = index; i < arr.length - 1; i++) {
//            arr[i] = arr[i + 1];
//        }
//        arr[arr.length - 1] = value;
//    }

        public int getWinner(int[] arr, int k) {
            if (k == 1) {
                return Math.max(arr[0], arr[1]);
            }
            int prevMax = arr[0];
            int count = 0;
            int curMax = prevMax;
            for (int i = 1; i < arr.length; i++) {
                curMax = Math.max(prevMax, arr[i]);
                if (prevMax == curMax) {
                    count++;
                    if (count == k) {
                        return curMax;
                    }
                } else {
                    prevMax = curMax;
                    count = 1;
                }
            }
            return curMax;
        }
}
//leetcode submit region end(Prohibit modification and deletion)

}